home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / assembler / progasm1.lha / SORGENTI3 / LEZIONE7d.s < prev    next >
Text File  |  1994-11-28  |  7KB  |  220 lines

  1.  
  2. ; Lezione7d.s    UNO SPRITE MOSSO VERTICALMENTE USANDO UNA TABELLA DI VALORI
  3. ;        (ossia di coordinate verticali) PRESTABILITI.
  4. ;        - Da notare che possiamo arrivare in basso fino alla linea $FF
  5. ;          e non oltre.
  6.  
  7.     SECTION    CiriCop,CODE
  8.  
  9. Inizio:
  10.     move.l    4.w,a6        ; Execbase
  11.     jsr    -$78(a6)    ; Disable
  12.     lea    GfxName(PC),a1    ; Nome lib
  13.     jsr    -$198(a6)    ; OpenLibrary
  14.     move.l    d0,GfxBase
  15.     move.l    d0,a6
  16.     move.l    $26(a6),OldCop    ; salviamo la vecchia COP
  17.  
  18. ;    Puntiamo la PIC "vuota"
  19.  
  20.     MOVE.L    #BITPLANE,d0    ; dove puntare
  21.     LEA    BPLPOINTERS,A1    ; puntatori COP
  22.     move.w    d0,6(a1)
  23.     swap    d0
  24.     move.w    d0,2(a1)
  25.  
  26. ;    Puntiamo lo sprite
  27.  
  28.     MOVE.L    #MIOSPRITE,d0        ; indirizzo dello sprite in d0
  29.     LEA    SpritePointers,a1    ; Puntatori in copperlist
  30.     move.w    d0,6(a1)
  31.     swap    d0
  32.     move.w    d0,2(a1)
  33.  
  34.     move.l    #COPPERLIST,$dff080    ; nostra COP
  35.     move.w    d0,$dff088        ; START COP
  36.     move.w    #0,$dff1fc        ; NO AGA!
  37.     move.w    #$c00,$dff106        ; NO AGA!
  38.  
  39. mouse:
  40.     cmpi.b    #$ff,$dff006    ; Linea 255?
  41.     bne.s    mouse
  42.  
  43.     bsr.s    MuoviSprite    ; Muovi lo sprite 0 verticalmente
  44.  
  45. Aspetta:
  46.     cmpi.b    #$ff,$dff006    ; linea 255?
  47.     beq.s    Aspetta
  48.  
  49.     btst    #6,$bfe001    ; mouse premuto?
  50.     bne.s    mouse
  51.  
  52.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  53.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  54.  
  55.     move.l    4.w,a6
  56.     jsr    -$7e(a6)    ; Enable
  57.     move.l    gfxbase(PC),a1
  58.     jsr    -$19e(a6)    ; Closelibrary
  59.     rts
  60.  
  61. ;    Dati
  62.  
  63. GfxName:
  64.     dc.b    "graphics.library",0,0
  65.  
  66. GfxBase:
  67.     dc.l    0
  68.  
  69. OldCop:
  70.     dc.l    0
  71.  
  72. ; Questa routine sposta in alto e in basso lo sprite agendo sui suoi byte
  73. ; VSTART e VSTOP, ossia i byte della sua posizione Y di inizio e fine,
  74. ; immettendoci delle coordinate gia' stabilite nella tabella TABY
  75.  
  76. MuoviSprite:
  77.     ADDQ.L    #1,TABYPOINT     ; Fai puntare al byte successivo
  78.     MOVE.L    TABYPOINT(PC),A0 ; indirizzo contenuto in long TABXPOINT
  79.                  ; copiato in a0
  80.     CMP.L    #FINETABY-1,A0  ; Siamo all'ultima longword della TAB?
  81.     BNE.S    NOBSTART    ; non ancora? allora continua
  82.     MOVE.L    #TABY-1,TABYPOINT ; Riparti a puntare dalla prima long
  83. NOBSTART:
  84.     moveq    #0,d0        ; Pulisci d0
  85.     MOVE.b    (A0),d0        ; copia il byte dalla tabella in d0
  86.     MOVE.b    d0,VSTART    ; copia il byte in VSTART
  87.     ADD.B    #13,D0        ; Aggiungi la lunghezza dello sprite per
  88.                 ; determinare la posizione finale (VSTOP)
  89.     move.b    d0,VSTOP    ; Muovi il valore giusto in VSTOP
  90.     rts
  91.  
  92. TABYPOINT:
  93.     dc.l    TABY-1        ; NOTA: i valori della tabella qua sono bytes,
  94.                 ; dunque lavoriamo con un ADDQ.L #1,TABYPOINT
  95.                 ; e non #2 come per quando sono word o con #4
  96.                 ; come quando sono longword.
  97.  
  98. ; Tabella con coordinate Y dello sprite precalcolate.
  99. ; Da notare che la posizione Y per far entrare lo sprite nella finestra video
  100. ; deve essere compresa tra $2c e $f2, infatti nella tabella ci sono byte non
  101. ; piu' grandi di $f2 e non piu' piccoli di $2c.
  102.  
  103. TABY:
  104.     dc.b    $EE,$EB,$E8,$E5,$E2,$DF,$DC,$D9,$D6,$D3,$D0,$CD ; salto in
  105.     dc.b    $CA,$C7,$C4,$C1,$BE,$BB,$B8,$B5,$B2,$AF,$AC,$A9 ; alto da
  106.     dc.b    $A6,$A4,$A1,$9E,$9B,$98,$96,$93,$90,$8E,$8B,$88 ; record!
  107.     dc.b    $86,$83,$81,$7E,$7C,$79,$77,$74,$72,$70,$6D,$6B ; 200 valori
  108.     dc.b    $69,$66,$64,$62,$60,$5E,$5C,$5A,$58,$56,$54,$52
  109.     dc.b    $51,$4F,$4D,$4B,$4A,$48,$47,$45,$44,$42,$41,$3F
  110.     dc.b    $3E,$3D,$3C,$3A,$39,$38,$37,$36,$35,$34,$33,$33
  111.     dc.b    $32,$31,$30,$30,$2F,$2F,$2E,$2E,$2D,$2D,$2D,$2C
  112.     dc.b    $2C,$2C,$2C,$2C,$2C,$2C,$2C,$2C,$2C,$2D,$2D,$2D
  113.     dc.b    $2E,$2E,$2F,$2F,$30,$30,$31,$32,$33,$33,$34,$35
  114.     dc.b    $36,$37,$38,$39,$3A,$3C,$3D,$3E,$3F,$41,$42,$44
  115.     dc.b    $45,$47,$48,$4A,$4B,$4D,$4F,$51,$52,$54,$56,$58
  116.     dc.b    $5A,$5C,$5E,$60,$62,$64,$66,$69,$6B,$6D,$70,$72
  117.     dc.b    $74,$77,$79,$7C,$7E,$81,$83,$86,$88,$8B,$8E,$90
  118.     dc.b    $93,$96,$98,$9B,$9E,$A1,$A4,$A6,$A9,$AC,$AF,$B2
  119.     dc.b    $B5,$B8,$BB,$BE,$C1,$C4,$C7,$CA,$CD,$D0,$D3,$D6
  120.     dc.b    $D9,$DC,$DF,$E2,$E5,$E8,$EB,$EE
  121. FINETABY:
  122.  
  123.  
  124.     SECTION    GRAPHIC,DATA_C
  125.  
  126. COPPERLIST:
  127. SpritePointers:
  128.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  129.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  130.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  131.     dc.w    $13e,0
  132.  
  133.     dc.w    $8E,$2c81    ; DiwStrt
  134.     dc.w    $90,$2cc1    ; DiwStop
  135.     dc.w    $92,$38        ; DdfStart
  136.     dc.w    $94,$d0        ; DdfStop
  137.     dc.w    $102,0        ; BplCon1
  138.     dc.w    $104,0        ; BplCon2
  139.     dc.w    $108,0        ; Bpl1Mod
  140.     dc.w    $10a,0        ; Bpl2Mod
  141.  
  142.             ; 5432109876543210
  143.     dc.w    $100,%0001001000000000    ; bit 12 acceso!! 1 bitplane lowres
  144.  
  145. BPLPOINTERS:
  146.     dc.w $e0,0,$e2,0    ;primo     bitplane
  147.  
  148.     dc.w    $180,$000    ; color0    ; sfondo nero
  149.     dc.w    $182,$123    ; color1    ; colore 1 del bitplane, che
  150.                         ; in questo caso e' vuoto,
  151.                         ; per cui non compare.
  152.  
  153.     dc.w    $1A2,$F00    ; color17, ossia COLOR1 dello sprite0 - ROSSO
  154.     dc.w    $1A4,$0F0    ; color18, ossia COLOR2 dello sprite0 - VERDE
  155.     dc.w    $1A6,$FF0    ; color19, ossia COLOR3 dello sprite0 - GIALLO
  156.  
  157.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  158.  
  159.  
  160. ; ************ Ecco lo sprite: OVVIAMENTE deve essere in CHIP RAM! ************
  161.  
  162. MIOSPRITE:        ; lunghezza 13 linee
  163. VSTART:
  164.     dc.b $50    ; Posizione verticale di inizio sprite (da $2c a $f2)
  165. HSTART:
  166.     dc.b $90    ; Posizione orizzontale di inizio sprite (da $40 a $d8)
  167. VSTOP:
  168.     dc.b $5d    ; $50+13=$5d    ; posizione verticale di fine sprite
  169.     dc.b $00
  170.  dc.w    %0000000000000000,%0000110000110000 ; Formato binario per modifiche
  171.  dc.w    %0000000000000000,%0000011001100000
  172.  dc.w    %0000000000000000,%0000001001000000
  173.  dc.w    %0000000110000000,%0011000110001100 ;BINARIO 00=COLORE 0 (TRASPARENTE)
  174.  dc.w    %0000011111100000,%0110011111100110 ;BINARIO 10=COLORE 1 (ROSSO)
  175.  dc.w    %0000011111100000,%1100100110010011 ;BINARIO 01=COLORE 2 (VERDE)
  176.  dc.w    %0000110110110000,%1111100110011111 ;BINARIO 11=COLORE 3 (GIALLO)
  177.  dc.w    %0000011111100000,%0000011111100000
  178.  dc.w    %0000011111100000,%0001111001111000
  179.  dc.w    %0000001111000000,%0011101111011100
  180.  dc.w    %0000000110000000,%0011000110001100
  181.  dc.w    %0000000000000000,%1111000000001111
  182.  dc.w    %0000000000000000,%1111000000001111
  183.  dc.w    0,0    ; 2 word azzerate definiscono la fine dello sprite.
  184.  
  185.  
  186.     SECTION    PLANEVUOTO,BSS_C    ; Il bitplane azzerato che usiamo,
  187.                     ; perche' per vedere gli sprite
  188.                     ; e' necessario che ci siano bitplanes
  189.                     ; abilitati
  190. BITPLANE:
  191.     ds.b    40*256        ; bitplane azzerato lowres
  192.  
  193.     end
  194.  
  195. I movimenti complessi e realistici si fanno con le tabelle!
  196. Provate a sostituire la tabella corrente con questa, ed otterrete un ondeggio
  197. dello sprite. (Amiga+b+c+i per copiare), (amiga+b+x per cancellare un pezzo)
  198.  
  199.  
  200. TABY:
  201.     dc.b    $8E,$91,$94,$97,$9A,$9D,$A0,$A3,$A6,$A9,$AC,$AF ; ondeggio
  202.     dc.b    $B2,$B4,$B7,$BA,$BD,$BF,$C2,$C5,$C7,$CA,$CC,$CE ; 200 valori
  203.     dc.b    $D1,$D3,$D5,$D7,$D9,$DB,$DD,$DF,$E0,$E2,$E3,$E5
  204.     dc.b    $E6,$E7,$E9,$EA,$EB,$EC,$EC,$ED,$EE,$EE,$EF,$EF
  205.     dc.b    $EF,$EF,$F0,$EF,$EF,$EF,$EF,$EE,$EE,$ED,$EC,$EC
  206.     dc.b    $EB,$EA,$E9,$E7,$E6,$E5,$E3,$E2,$E0,$DF,$DD,$DB
  207.     dc.b    $D9,$D7,$D5,$D3,$D1,$CE,$CC,$CA,$C7,$C5,$C2,$BF
  208.     dc.b    $BD,$BA,$B7,$B4,$B2,$AF,$AC,$A9,$A6,$A3,$A0,$9D
  209.     dc.b    $9A,$97,$94,$91,$8E,$8B,$88,$85,$82,$7F,$7C,$79
  210.     dc.b    $76,$73,$70,$6D,$6A,$68,$65,$62,$5F,$5D,$5A,$57
  211.     dc.b    $55,$52,$50,$4E,$4B,$49,$47,$45,$43,$41,$3F,$3D
  212.     dc.b    $3C,$3A,$39,$37,$36,$35,$33,$32,$31,$30,$30,$2F
  213.     dc.b    $2E,$2E,$2D,$2D,$2D,$2D,$2C,$2D,$2D,$2D,$2D,$2E
  214.     dc.b    $2E,$2F,$30,$30,$31,$32,$33,$35,$36,$37,$39,$3A
  215.     dc.b    $3C,$3D,$3F,$41,$43,$45,$47,$49,$4B,$4E,$50,$52
  216.     dc.b    $55,$57,$5A,$5D,$5F,$62,$65,$68,$6A,$6D,$70,$73
  217.     dc.b    $76,$79,$7C,$7F,$82,$85,$88,$8B
  218. FINETABY:
  219.  
  220.